home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / psion / spy.doc < prev    next >
Text File  |  1993-07-07  |  9KB  |  181 lines

  1. Notes on Spy.app
  2. ================
  3.  
  4. The main display is a scrolling list of processes currently
  5. running on the Series3.  The `Change processes' menu option
  6. allows customisation of which processes are shown.  "System"
  7. processes are simply ones whose names start with "Sys$", and
  8. include:
  9.     sys$shll - which the user sees as the System Screen
  10.     sys$wsrv - the Window Server, which coordinates access to the
  11. screen and keyboard
  12.     sys$fsrv - the File Server, which coordinates access to the
  13. filing systems
  14.     sys$mang - the Manager, which keeps track of all resources
  15. used by processes (so that, for example, they can be properly
  16. tidied whenever processes exit)
  17.     sys$ncp - the brains behind Remote Link (when it is running).
  18. The Null process, sys$null, which performs the vital task of
  19. switching the Series3 off following sufficient inactivity, is
  20. omitted from the list displayed, for various technical reasons.
  21.  
  22. First letter matching works in the main window, so that eg
  23. pressing 'C' enough times will position the highlight to the
  24. Calculator process.
  25. Arrows are drawn in the top right and bottom right corner,
  26. Agenda-wise, whenever there are more processes beyond the visible
  27. boundaries of the list.
  28.  
  29. The data displayed is updated every time Spy comes into
  30. foreground, and also whenever the `Update' menu option is
  31. selected.  By default, it is also updated regularly on a timer,
  32. though this can be disabled by a menu option.  The `Refresh rate'
  33. option governs how frequently updates take place, when the timer
  34. is enabled.
  35.  
  36. There are in all twelve pieces of data that can be displayed for
  37. each process, but only three of these can be seen at any one
  38. time.  Use the `Change data' menu option to choose which.
  39. Many of the data items can be meaningfully displayed either in
  40. Hex or in Decimal.  Another menu option controls this.
  41.  
  42. Five of the twelve possible items of data concern the allocator
  43. heap of the process.  Each process has its own heap, which can
  44. vary in size according to the needs of the program.  Thus a Word
  45. Processor editing a large document will typically have a larger
  46. heap than a Word Processor editing a smaller document.
  47. Each heap is divided into "alloced cells" and "free cells".  The
  48. items "Cells allocated" and "Cells free" count these, and the
  49. items "Bytes allocated" and "Bytes free" sum how many bytes
  50. belong in each category.
  51. This data was of great help in developing the built-in
  52. applications (amongst others).  It is of course vital that an
  53. application frees cells it no longer requires - otherwise these
  54. cells go to what is called "alloc heaven".  Something to watch
  55. for in particular is alloc heaven following an out-of-memory
  56. failure.  Typically, a process such as launching a dialog
  57. involves a number of different allocs; if any one of these fails,
  58. all the allocs which have already succeeded must be undone.
  59. System code provides mechanisms such as "automatic destruction"
  60. and "automated clean-up" to help applications here, but
  61. applications can use these incorrectly at times - hence the need
  62. for real-time checking.
  63. Most of this is of course irrelevant to Opl programs, which
  64. standardly just work with static data and data on the stack,
  65. rather than dynamically allocating memory as and when required.
  66.  
  67. Whenever a process starts, its stack is filled up with '0xFF's. 
  68. This makes it easy to see how much stack has been used, at any
  69. one time.  Quality programs need to avoid having too large a
  70. stack - the built-in applications default to a stack of 0xa00. 
  71. On the other hand, the operating system panics them ("exit 69") if
  72. it ever discovers that their stack is less than 0x100.  This is
  73. because whenever an interrupt occurs, it runs in the stack of the
  74. current process.
  75. The `Reset least stack' menu option simply refills the bottom of
  76. the process's stack with '0xFF's (ie up to its present stack
  77. pointer).
  78.  
  79. The "Segment size" of a process gives the size of its data
  80. segment - which consists of the heap, static data private to the
  81. application, the stack, and finally the so-called "reserved
  82. statics" at the bottom end.  The quoted "Segment size" of an
  83. application can sometimes give a misleading account of how much
  84. memory it is actually using - since there are free cells as well
  85. as alloced cells in the heap.  From time to time, the operating
  86. system may try to compress these heaps, but it can only do this
  87. by removing any free cells AT THE END OF THE HEAP.  Applications
  88. should strive to avoid ending up with large free cells in the
  89. middle of their heap - though this is a very difficult goal to
  90. achieve.
  91.  
  92. As an experiment, I've just opened my personal database file. 
  93. Spy tells me the Database has a segment size of 0x2650, having 59
  94. alloc cells totalling 0x6ee bytes.  Only 0x10e bytes in the heap
  95. are free - from which you can deduce that the Database has a lot
  96. of static data (around 0x1454).  At the same time, the `Memory'
  97. option in the System Screen says the Database is using 9k - which
  98. is close enough to the hex value of 0x2650.
  99. Next, in the Database, I bring up the Print Setup dialog, and
  100. then the Printer Model subdialog, and finally the Default Font
  101. dialog inside that.  Spy now tells me that the Database has a
  102. segment of 0x3720 bytes, in which there are 169 alloc cells
  103. comprising 0x123a bytes.  Next I press Help twice in the
  104. Database.  The alloc count has gone up to 179 cells, comprising
  105. 0x1428 bytes.  Next I cancel out of the five levels of dialogs. 
  106. The alloc count is down to 60, comprising 0x73e bytes; the
  107. segment size is 0x3720, with the last free cell being 0x1126
  108. bytes long.  After running the heap compressor, the segment size
  109. dwindles back to 0x2700.
  110. (On the face of things, there may seem to be a bug here - there is
  111. one more alloc cell at the end than at the start.  These 0x50 bytes
  112. are actually an instance of the "Printer manager" class, which system
  113. code creates for an application whenever the Print Dialog suite is
  114. entered (or when the application actually prints).  Try the whole
  115. experiment again and you will not see any repetition.  This is just
  116. the kind of analysis that Spy throws up.)
  117.  
  118. The heap compressor actually gets run whenever an application
  119. makes an alloc request that cannot immediately be satisfied
  120. within its own alloc heap; the operating system tries to grow the
  121. heap of that process by shrinking the heaps of all the others.
  122.  
  123. Anyone following this whole experiment might now like to "Reset
  124. the least stack" of the Database and then watch the Stack Pointer
  125. and the Least Stack as the five dialogs are launched and then
  126. cancelled again.  I make it
  127.     Lst:  944 -> 466 -> 466 -> 466 -> 3df -> 3df -> ... 3de
  128.     SP:   944 -> 822 -> 728 -> 62a -> 62a -> 62a -> ... 944
  129. (all values in Hex), from which you can deduce that the Help
  130. dialogs don't wind up the stack in the same way that the others
  131. do.
  132.  
  133. Whenever Spy collects heap statistics for an application, it also
  134. checks the heap integrity.  Any defect (caused for example by
  135. writing beyond the end of an alloc cell, or freeing a cell that
  136. was never alloced) results in an immediate alert.  Hopefully, you
  137. will never see any such alert - unless you are developing your
  138. own C programs.
  139.  
  140. The Process Priority gives the pecking order of the processes, as
  141. regards gaining CPU from the multi-tasking scheduler.  Most
  142. applications the user sees run at 0x80 when in foreground, and at
  143. 0x70 when in background.  This prevents computationally busy
  144. background tasks from detracting from the performance of the
  145. foreground task.  Spy momentarily ups its own priority to a
  146. massive 0xc0 (the maximum allowed to non-OS processes) whenever
  147. it collects heap statistics from other processes, to lessen the
  148. chances of other processes manipulating their heaps at the same
  149. time as Spy is walking through them.  Occasionally, Spy will find
  150. that a heap is momentarily marked as "locked" when it tries to
  151. survey it - this indicating that the Operating System is busy
  152. doing something there - in which case the heap statistics will
  153. all just be shown as 0 for that process.
  154.  
  155. The "Process ID" of a process is essentially the address of the
  156. control block of the application in the Operating System data
  157. space, although the top nibble reflects how many times that same
  158. slot has been re-used since the last reset (it will therefore
  159. always be zero for sys$mang, sys$fsrv, and sys$wsrv).  When
  160. processes talk to each other, for example in conjunction with the
  161. `Bring' menu option, they need to know each other's PID ("Process
  162. ID").
  163.  
  164. The IO Semaphore count basically keeps track of how many outstanding
  165. events a process has to respond to.  This will usually be -1 or zero,
  166. but if you task to the System Screen and then straight back to Spy
  167. again, you may see the count for sys$shll momentarily go as high as
  168. three.
  169.  
  170. Well that's about it.  Incidentally, the code in Spy.app was
  171. written at various times by at least seven different members of the
  172. Software Development team at Psion.  An earlier version runs on the
  173. MC range of computers.  The version I shipped was written using the
  174. so-called HWIF library - ie just straight C, without any
  175. object-oriented stuff.
  176.  
  177. Let me know of any bugs you notice.
  178.  
  179. DavidW, 28/3/92.
  180.  
  181.